package com.itheima3.web.exceptionDemo;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * 异常处理器
 */
//@Component
public class SysExceptionResolver implements HandlerExceptionResolver {

    /**
     * 处理异常业务逻辑
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @return 自定义异常（可预期的异常）
     * 运行时异常
     */
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 获取到异常对象
        SysException e = null;
        // 对异常进行归类
        // 可以预期的异常(自定义异常)
        if (ex instanceof SysException) {
            e = (SysException) ex;
            // 根据异常内容做出响应的处理
            String message = e.getMessage();// 登录失败
        } else {
            // 运行时异常
            e = new SysException("系统正在维护....");
            // 做日志记录
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            String s = sw.toString();
            // 写文件
            // 做异常的严重性校验
            // 如果异常比较严重 我们可以发送邮件 / 发送短信
        }
        // 创建ModelAndView对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg", e.getMessage());
        mv.setViewName("error");
        return mv;
    }
}














